Designing and fabricating a hardware system typically requires multiple stages of testing. For example, the circuit design of the IC may be first simulated in a completely software-based environment before being fabricated. The simulated hardware is changed as various bugs are identified. Generally, updating simulated hardware is much faster and cheaper than updating a physical hardware system.
In addition to testing and debugging the circuit design, the firmware tasked with initializing and controlling the hardware system may also be tested using a simulator that includes a model of the hardware system. If the firmware causes the simulated model to behave in an unexpected manner, the firmware is changed and re-executed using the simulator. Once the firmware is validated using the simulator, the firmware may be executed on a physical representation of the hardware system—i.e., the IC or a plurality of ICs.